home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / cpp_libs / answrbok / 5_5.lha / 5_5 / 5_5c3.c < prev    next >
Text File  |  1993-08-08  |  1KB  |  76 lines

  1. * Copyright (c) 1990 by AT&T Bell Telephone Laboratories, Incorporated. */
  2. * The C++ Answer Book */
  3. * Tony Hansen */
  4. * All rights reserved. */
  5. / print out the tree in assembly format
  6. / WE32100 version
  7. ifdef NONLOCAL        /* DELETE */
  8. include <intalloc.h>
  9. include <stackalloc.h>
  10. else        /* DELETE */
  11. include "intalloc.h"        /* DELETE */
  12. include "stackalloc.h"        /* DELETE */
  13. endif        /* DELETE */
  14.  
  15. / forward declaration of
  16. / assemblyprint() for binop()
  17. tatic void assemblyprint(tree* head,
  18.    stackalloc &curloc, const intalloc *cursp);
  19.  
  20. ifdef USE8086    /* DELETE */
  21. include "5_5c3_6.c"    /* DELETE */
  22. else        /* DELETE */
  23. include "5_5c3_W.c"    /* EXPAND */
  24. endif        /* DELETE */
  25.  
  26. / print out the appropriate assembly
  27. / language instructions
  28. tatic void assemblyprint(tree* head,
  29.    stackalloc &curloc, const intalloc *cursp)
  30.  
  31.    if (head)
  32. {
  33. switch (head->type)
  34.     {
  35.     case PLUS: case MUL: case DIV:
  36.     binop(head, curloc, cursp);
  37.     break;
  38.  
  39.     case MINUS:
  40.     if (head->right)
  41.         binop(head, curloc, cursp);
  42.  
  43.     else
  44.         negop(head, curloc, cursp);
  45.     break;
  46.  
  47.     case NUMBER:
  48.     svnumber(head, curloc);
  49.     break;
  50.  
  51.     case LP:
  52.     assemblyprint(head->left, curloc,
  53.         cursp);
  54.     break;
  55.  
  56.     case RP:
  57.     case END:
  58.     default:
  59.     error("invalid type within tree");
  60.     break;
  61.     }
  62. }
  63.  
  64.    else
  65. error("NULL node found");
  66.  
  67.  
  68. oid expr:: print()
  69.  
  70.    setup();
  71.    intalloc cursp(15, 15);
  72.    stackalloc stacktop(&cursp);
  73.    assemblyprint(head, stacktop, &cursp);
  74.    finishup(stacktop);
  75.  
  76.